/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package franquiciaCentral;

import control.RegionalWebService;
import control.RegionalWebService2;
import control.RegionalWebService2Service;
import control.RegionalWebServiceService;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import franquiciacentral.IFranquicia;
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;

/**
 *
 * @author Mario
 */
@Remote
@Stateless(name = "ServidorCentral")
public class FranquiciaImpl implements IFranquicia {

    public String RegistrarProducto(String nombreProducto) {
        try {
            SAXBuilder builder = new SAXBuilder(false);

            Document doc = builder.build("productos.xml");

            Element raiz = doc.getRootElement();
            Element articulo = new Element("nombre").setText(nombreProducto);

            raiz.addContent(articulo);

            XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());
            FileOutputStream file = new FileOutputStream("productos.xml");
            out.output(doc, file);

            file.flush();
            file.close();

            return "Se agrego exitosamente " + nombreProducto + " a la lista de productos!.<br/>";

        } catch (Exception e) {
            return "Error: " + e.getMessage();
        }
    }

    public String SucursalesGlobal() {
        String resp = "";

        //creamos tantos objetos de los webservices como regiones haya
        RegionalWebServiceService service = new RegionalWebServiceService();
        RegionalWebService puerto = service.getRegionalWebServicePort();
        resp += puerto.sucursalesGlobal();

        RegionalWebService2Service service2 = new RegionalWebService2Service();
        RegionalWebService2 puerto2 = service2.getRegionalWebService2Port();
        resp += puerto2.sucursalesGlobal();

        return resp;
    }

    public ArrayList ObtenerRegiones() {
        ArrayList Regiones = new ArrayList();
        try {
            SAXBuilder builder = new SAXBuilder(false);
            Document doc = builder.build("sucursales.xml");
            Element raiz = doc.getRootElement();

            //Obtenemos todas las regiones.
            List regiones = raiz.getChildren("region");
            Iterator i = regiones.iterator();

            //Recorremos cada region.
            while (i.hasNext()) {
                Element reg = (Element) i.next();
                Regiones.add(reg.getAttributeValue("nombre"));
            }

            return Regiones;
        } catch (Exception e) {
            Regiones.add("Error: " + e.getMessage());
            return Regiones;
        }
    }

    public String SucursalesPorRegion(String region) {
        String resp = "";

        if (region.equalsIgnoreCase("Region 1")) {
            RegionalWebServiceService service = new RegionalWebServiceService();
            RegionalWebService puerto = service.getRegionalWebServicePort();
            resp = puerto.sucursalesGlobal();
            return resp;

        } else if (region.equalsIgnoreCase("Region 2")) {
            RegionalWebService2Service service = new RegionalWebService2Service();
            RegionalWebService2 puerto2 = service.getRegionalWebService2Port();
            resp = puerto2.sucursalesGlobal();
            return resp;
        } else {
            return "Error: Region Desconocida";
        }

    }

    public String InventarioGlobal() {
        String resp = "";
        
        RegionalWebServiceService service = new RegionalWebServiceService();
        RegionalWebService puerto = service.getRegionalWebServicePort();
        resp += puerto.inventarioGlobal();

        RegionalWebService2Service service2 = new RegionalWebService2Service();
        RegionalWebService2 puerto2 = service2.getRegionalWebService2Port();
        resp += puerto2.inventarioGlobal();

        return resp;
    }

    public String InventarioPorRegion(String region) {
        String resp = "";

        if (region.equalsIgnoreCase("Region 1")) {
            RegionalWebServiceService service = new RegionalWebServiceService();
            RegionalWebService puerto = service.getRegionalWebServicePort();
            resp = puerto.inventarioPorRegion();
            return resp;

        } else if (region.equalsIgnoreCase("Region 2")) {
            RegionalWebService2Service service = new RegionalWebService2Service();
            RegionalWebService2 puerto2 = service.getRegionalWebService2Port();
            resp = puerto2.inventarioPorRegion();
            return resp;

        } else {
            return "Error: Region Desconocida.";
        }
    }

    public ArrayList ObtenerSucursales() {
        //deberia haber tantos objetos como regiones web services
        ArrayList TodasLasSucursales = new ArrayList();
        ArrayList resp = new ArrayList();

        RegionalWebServiceService service = new RegionalWebServiceService();
        RegionalWebService puerto = service.getRegionalWebServicePort();

        resp = (ArrayList) puerto.obtenerSucursales();

        for (int i = 0; i < resp.size(); i++) {
            TodasLasSucursales.add(resp.get(i));
        }

        RegionalWebService2Service service2 = new RegionalWebService2Service();
        RegionalWebService2 puerto2 = service2.getRegionalWebService2Port();
        resp = new ArrayList();
        resp =(ArrayList) puerto2.obtenerSucursales();

        for (int i = 0; i < resp.size(); i++) {
            TodasLasSucursales.add(resp.get(i));
        }

        return TodasLasSucursales;
    }

    public String InventarioPorSucursal(String sucursal) {

        String respuesta = "";

        RegionalWebServiceService service = new RegionalWebServiceService();
        RegionalWebService puerto = service.getRegionalWebServicePort();
        respuesta += puerto.inventarioPorSucursal(sucursal);

        //Region 2
        RegionalWebService2Service service2 = new RegionalWebService2Service();
        RegionalWebService2 puerto2 = service2.getRegionalWebService2Port();
        respuesta +=puerto2.inventarioPorSucursal(sucursal);


        return respuesta;
    }

    public String VentasGlobal() {
        //llamar a las tres regiones
        String respuesta = "", respuestaAux = "";
        String[] totalString;
        int total = 0;

        RegionalWebServiceService service = new RegionalWebServiceService();
        RegionalWebService puerto = service.getRegionalWebServicePort();
        respuesta = puerto.ventasGlobal();

        totalString = respuesta.split("-");
        respuestaAux += totalString[0];
        total += Integer.parseInt(totalString[1]);

        //--------------------Region 2--------------------------
        RegionalWebService2Service service2 = new RegionalWebService2Service();
        RegionalWebService2 puerto2 = service2.getRegionalWebService2Port();
        respuesta =puerto2.ventasGlobal();

        totalString = respuesta.split("-");
        respuestaAux += totalString[0];
        total += Integer.parseInt(totalString[1]);
        //------------------end of Region 2-----------------------

        respuestaAux += "<br/>-------------------<br/>" + total;

        return respuestaAux;
    }

    public String VentasPorRegion(String region) {
        if (region.equalsIgnoreCase("Region 1")) {
            RegionalWebServiceService service = new RegionalWebServiceService();
            RegionalWebService puerto = service.getRegionalWebServicePort();

            return puerto.ventasPorRegion();
        } else if (region.equalsIgnoreCase("Region 2")) {
            RegionalWebServiceService service = new RegionalWebServiceService();
            RegionalWebService puerto = service.getRegionalWebServicePort();

            return puerto.ventasPorRegion();
        } else 
            return "Error: Region Desconocida.";
        
    }

    public String VentasPorSucursal(String sucursal) {
        String respuesta = "", respuestaAux = "";
        String[] respuestaArreglo;

        RegionalWebServiceService service = new RegionalWebServiceService();
        RegionalWebService puerto = service.getRegionalWebServicePort();
        respuesta = puerto.ventasPorSucursal(sucursal);

        respuestaArreglo = respuesta.split("-");
        respuestaAux += respuestaArreglo[0];

        //Region 2
        RegionalWebService2Service service2 = new RegionalWebService2Service();
        RegionalWebService2 puerto2 = service2.getRegionalWebService2Port();
        respuesta = puerto2.ventasPorSucursal(sucursal);

        respuestaArreglo = respuesta.split("-");
        respuestaAux += respuestaArreglo[0];
        
        return respuestaAux;
    }
}
